iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
佛心分享-IT 人自學之術

什麼都摸一點!拒絕當不沾鍋!系列 第 26

Day26 人工智慧 (4) Hello World!

  • 分享至 

  • xImage
  •  

“Is artificial intelligence less than our intelligence?” —Spike Jonze

手寫數字辨識

手寫數字辨識堪稱是深度學習界的Hello World!,為了避免環境問題,我們這次使用Google Colab作為我們的環境(Google Colab提供雲端運算資源,供程式執行):

將所需的函式庫

import numpy as np
import tensorflow as tf
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Input

匯入keras中內建的資料集:

train_X是一個(60000, 28, 28)的陣列,等於是60000張28*28的圖片。

train_y代表這60000張,每張所對應到的數字(也就是一張圖片它是數字幾)。

train_X和train_y的出現很合理,那test_X和test_y呢?

如果我們要評估一個模型是不是好的模型,就得拿不在訓練集裡的輸入(沒看過的圖片),才能看出這個模型的準確率如何。

因此我們不會把我們所擁有的所有圖片拿來訓練,而是會分成訓練集跟測試集兩組!

標準化

標準化指的是把每個像素點的灰階值(0~255),全部壓縮到0~1之間。

(延伸思考:為什麼要標準化呢?)

分類

把輸出結果分成10類

重塑資料

將原本的X_train從(60000, 28, 28)變成(60000, 784),X_test同理。

(train_X, train_y), (test_X, test_y) = tf.keras.datasets.mnist.load_data() #load data from mnist

# 標準化
X_train = train_X.astype('float')/255 
X_test = test_X.astype('float')/255

# 分類
y_train = tf.keras.utils.to_categorical(train_y, 10)  
y_test = tf.keras.utils.to_categorical(test_y, 10)  

# reshape到ANN的輸入格式 60000張, 784維
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)

建立輸入、中間、輸出層:

ANN_model = Sequential([
    Input(shape = (784,)), # 建立輸入層
    Dense(units=128, kernel_initializer='normal', activation='relu'), # 建立隱藏層
    Dense(units=64, kernel_initializer='normal', activation='relu'), # 建立隱藏層
    Dense(units=10, kernel_initializer='normal', activation='softmax')
])
ANN_model.compile(loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['acc'])

(延伸思考:這些參數是做什麼的?)

訓練模型並儲存:

ANN_model_History = ANN_model.fit(
    X_train, 
    y_train, 
    batch_size= 128, 
    epochs=10, 
    validation_split=0.2, 
)
ANN_model.save('ANN_NumberPredict.h5')

(延伸思考:嘗試解釋batch_size和epochs為何存在)

validation_split是在訓練過程中再拆分出測試集,這樣可以幫助模型了解自己現在模型的成效如何。

評估模型

ANN_model.evaluate(X_test, y_test)

模型到這邊就訓練完了!

匯入模型

import keras
ANN_model = keras.models.load_model('./ANN_NumberPredict.h5')

下一篇會講解要怎麼將手機拍的照片透過我們這個模型進行預測!


上一篇
Day25 人工智慧 (3) 深度學習是怎麼學的?
下一篇
Day27 人工智慧 (5) 怎麼用模型去預測圖片?
系列文
什麼都摸一點!拒絕當不沾鍋!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言